#include <stdio.h>
#include <io_utils.h>
#include <errno.h>
#include <string.h>
char std_buffer[BUFSIZ];

/**
 * 注意
 * 设置缓冲区生命周期>文件生命周期
 * fflush()
 * @return
 */
int main() {
    setbuf(stdout, std_buffer);

    FILE *file = fopen("CMakeLists.txt", "r");
    char buf[8192];
    //setbuf(file, NULL);
    if (file) {
        setvbuf(file, buf, _IOLBF, 8192);
        while(1){
            size_t read_bytes = fread(buf, sizeof(char), 8192, file);
            fwrite(buf, sizeof(char), read_bytes, stdout);
            if(read_bytes < 8192){
                if(feof(file)){

                } else if(ferror(file)){
                    perror("file error");
                }
                break;
            }
        }
        fflush(stdout);
        //...
        puts("\nOpen successfully.");
        int err = ferror(file);
        PRINT_INT(err);

        int eof = feof(file);
        PRINT_INT(eof);
        fflush(stdout);
        fclose(file);
    } else {
        PRINT_INT(errno);
        puts(strerror(errno));
        perror("fopen");
    }
    return 0;
}
